package com.pkk.penguin.java.notepad.http.charset;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * http请求charset的编码问题
 *
 * @author kunkun.pei
 * @create 2021-08-13 11:11
 **/
public class HttpCharsetTest {


    @Test
    public void shiheng_13_20210813111224() {
        System.out.println("欢迎使用单元测试方法【shiheng_13()_20210813111224】");
        System.out.println("此方法测试描述：【普通字符集问题】");
        System.out.println("- 一般地，在网络传输中，都是以字节序列的方式传输的，发送方在发送的时候以某种编码方式进行字节序列，然后接收方需要指定以特定相同的编码进行接收转换，否则会出现乱码");

        String charsetStr = "中国人";
        byte[] bytes = charsetStr.getBytes(StandardCharsets.UTF_8);
        String utf8Str = new String(bytes, StandardCharsets.UTF_8);
        String iso_8859_1Str = new String(bytes, StandardCharsets.ISO_8859_1);
        System.out.println(utf8Str);
        System.out.println(iso_8859_1Str);
    }


    @Test
    public void shiheng_33_20210813111728() {
        System.out.println("欢迎使用单元测试方法【shiheng_33()_20210813111728】");
        System.out.println("此方法测试描述：【Http的网路请求问题集】");
        System.out.println("HTTP编码设置\n" +
                "在HTTP中，与字符集和字符编码相关的信息头是Accept-Charset/Content-Type，另外主要区分Accept-Charset、Accept-Encoding、Accept-Language、Content-Type、Content-Encoding、Content-Language\n" +
                "\n" +
                "Accept-Charset：浏览器申明自己接收的字符集，这就是本文前面介绍的各种字符集和字符编码，如gb2312，utf-8（通常我们说Charset包括了相应的字符编码方案）；\n" +
                "\n" +
                "Accept-Encoding：浏览器申明自己接收的编码方法，通常指定压缩方法，是否支持压缩，支持什么压缩方法（gzip，deflate），（注意：这不是值字符编码）；\n" +
                "\n" +
                "Accept-Language：浏览器申明自己接收的语言。语言跟字符集的区别：中文是语言，中文有多种字符集，比如big5，gb2312，gbk等等；\n" +
                "\n" +
                "Content-Type：WEB服务器告诉浏览器自己响应的对象的类型和字符集。例如：Content-Type: text/html; charset='gb2312'\n" +
                "\n" +
                "Content-Encoding：WEB服务器表明自己使用了什么压缩方法（gzip，deflate）压缩响应中的对象。例如：Content-Encoding：gzip\n" +
                "\n" +
                "Content-Language：WEB服务器告诉浏览器自己响应的对象的语言。\n");

        String url = "https://blog.csdn.net/qq_38409944/article/details/80637980";
        //url = "https://e2796ba9-f87c-40db-8403-fba54811ca22.mock.pstmn.io/javanotepad/http/charset";


        JSONArray jsonArray = new JSONArray();
        jsonArray.add("qifentian2017");

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("developId", 106445);
        jsonObject.put("businessId", 16);
        jsonObject.put("usernames", jsonArray);

        HttpRequest request = HttpUtil.createPost(url);
        request.header("Content-Type", "application/json;charset=UTF-8");
        request.header("Accept-Charset", "GBK");
        request.charset(Charset.forName("GBK"));

        request.body(jsonObject.toJSONString());
        //get.header()
        HttpResponse execute = request.execute();
        System.out.println(execute.toString());
        System.out.println(execute.body());
    }


}
